home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Tool Chest / Development Tools & Languages / Dylan Related / Mindy / Mindy 1.2 - portable sources / libraries / string-ext / debug.dylan < prev    next >
Encoding:
Text File  |  1995-03-15  |  4.9 KB  |  192 lines  |  [TEXT/ttxt]

  1. module: regular-expressions
  2. author: Nick Kramer (nkramer@cs.cmu.edu)
  3. synopsis: Useful code for debugging regular expressions
  4. copyright:  Copyright (C) 1994, Carnegie Mellon University.
  5.             All rights reserved.
  6. rcs-header: $Header: debug.dylan,v 1.1 94/11/08 22:55:40 nkramer Exp $
  7.  
  8. //======================================================================
  9. //
  10. // Copyright (c) 1994  Carnegie Mellon University
  11. // All rights reserved.
  12. // 
  13. // Use and copying of this software and preparation of derivative
  14. // works based on this software are permitted, including commercial
  15. // use, provided that the following conditions are observed:
  16. // 
  17. // 1. This copyright notice must be retained in full on any copies
  18. //    and on appropriate parts of any derivative works.
  19. // 2. Documentation (paper or online) accompanying any system that
  20. //    incorporates this software, or any part of it, must acknowledge
  21. //    the contribution of the Gwydion Project at Carnegie Mellon
  22. //    University.
  23. // 
  24. // This software is made available "as is".  Neither the authors nor
  25. // Carnegie Mellon University make any warranty about the software,
  26. // its performance, or its conformity to any specification.
  27. // 
  28. // Bug reports, questions, comments, and suggestions should be sent by
  29. // E-mail to the Internet address "gwydion-bugs@cs.cmu.edu".
  30. //
  31. //======================================================================
  32.  
  33.  
  34. define method print-coll (c :: <collection>)
  35.   for (elt keyed-by key in c)
  36.     format("[%=] %=\n", key, elt);
  37.   end for;
  38. end method print-coll;
  39.  
  40.  
  41. define method print-seq (c :: <collection>)
  42.   format("[");
  43.   for (elt keyed-by key in c)
  44.     format("%= ", elt);
  45.   end for;
  46.   format("]\n");
  47. end method print-seq;
  48.  
  49.  
  50. define method print-em-all (#rest args)
  51.   for (elt in args)
  52.     format("%= ", elt);
  53.   end for;
  54. end method print-em-all;
  55.  
  56.  
  57.  
  58. // Prints out a prefix representation of the parse tree
  59. //
  60. define method print-parse-tree (r :: <union>)
  61.   format("|");
  62.   print-parse-tree(r.left);
  63.   print-parse-tree(r.right);
  64. end method print-parse-tree;
  65.  
  66.  
  67. define method print-parse-tree (r :: <alternative>)
  68.   format("@");
  69.   print-parse-tree(r.left);
  70.   print-parse-tree(r.right);
  71. end method print-parse-tree;
  72.  
  73.  
  74. define method print-parse-tree (r :: <quantified-atom>)
  75.   print-parse-tree(r.atom);
  76.   format("*");
  77. end method print-parse-tree;
  78.  
  79.  
  80. define method print-parse-tree (r :: <parsed-character>)
  81.   format("%c", r.character);
  82. end method print-parse-tree;
  83.  
  84.  
  85. define method print-parse-tree (r :: <parsed-backreference>)
  86.   format("\\%d", r.group-number);
  87. end method print-parse-tree;
  88.  
  89.  
  90. define method print-parse-tree (r :: singleton(#f))
  91.   format("_");
  92. end method print-parse-tree;
  93.  
  94.  
  95. define method print-parse-tree (r :: <parsed-set>)
  96.   print-char-set(r.char-set);
  97. end method print-parse-tree;
  98.  
  99.  
  100. define method print-parse-tree (r :: <mark>)
  101.   format("{mark %d}", r.group-number);
  102.   print-parse-tree(r.child);
  103. end method print-parse-tree;
  104.  
  105.  
  106. define method print-parse-tree (r :: <parsed-assertion>)
  107.   format("%=", r.asserts);
  108. end method print-parse-tree;
  109.  
  110.  
  111. define method print-char-set (set :: <character-set>)
  112.   format("<");
  113.   if (set.negated-set?)
  114.     format("^");
  115.   end if;
  116.   for (range in set.char-ranges)
  117.     format("%c-%c", head(range), tail(range));
  118.   end for;
  119.   for (c in set.single-chars)
  120.     format("%c", c);
  121.   end for;
  122.   format(">");
  123. end method print-char-set;
  124.  
  125.  
  126. define method print-pointer(s)
  127.   format("#f ");
  128. end method print-pointer;
  129.  
  130.  
  131. define method print-pointer(s :: <NFA-state>)
  132.   format("%d ", s.number);
  133. end method print-pointer;
  134.  
  135.  
  136. define method print-nfa-state (s :: <e-state>)
  137.   format("e-state ");
  138.   print-pointer(s.other-next-state);
  139. end method print-nfa-state;
  140.  
  141.  
  142. define method print-nfa-state (s :: <character-atom>)
  143.   format("char(%c) ", s.atom-char);
  144. end method print-nfa-state;
  145.  
  146.  
  147. define method print-nfa-state (s :: <set-atom>)
  148.   format("set ");
  149. end method print-nfa-state;
  150.  
  151.  
  152. define method print-nfa-state (s :: <assertion>)
  153.   format("assertion(%=) ", s.asserts);
  154. end method print-nfa-state;
  155.  
  156.  
  157. define method print-nfa ()
  158.   for (index from 0 below state-count)
  159.     let s = machine[index];
  160.     format("[%d] ", index);
  161.     print-pointer(s.next-state);
  162.     print-nfa-state(s);
  163.     format("\n");
  164.   end for;
  165. end method print-nfa;
  166.  
  167.  
  168. define method print-dfa()
  169.   for (i from 0 below next-dfa-state-number)
  170.     format("State %d:", i);
  171.     if (DFA-array[i].final-state)   format("   [final]");  
  172.     else                            format("   [not final]"); end;
  173.     format("\n");
  174.     if (instance?(DFA-array[i], <DFA-assertion>))
  175.       format("   [true]  -> %d\n", DFA-array[i].true-state.debug-number);
  176.       format("   [false] -> %d\n", DFA-array[i].false-state.debug-number);
  177.     else
  178.       for (elt keyed-by c in DFA-array[i].next-state)
  179.     if (elt = #f)
  180.       format("   [%c] is #f\n", c);
  181.     else
  182.       unless (elt == dead-state)
  183.         format("   [%c] -> %d\n", c, elt.debug-number);
  184.       end unless;
  185.     end if;
  186.       end for;
  187.     end if;
  188.   end for;
  189.  
  190.   format("Dead state is %d\n", dead-state.debug-number);
  191. end method print-dfa;
  192.